# @Time : 2020/6/28 10:39
# @Author : Fioman 
# @Phone : 13149920693
def f1(a):
    print(a) # 局部变量
    print(b) # 全局变量


def f2(a):
    print(a)
    print(b)
    b = 9

def f3(a):
    global b
    print(a)
    print(b)
    b = 9


if __name__ == '__main__':
    b = 6
    f1(3)
    # f2(3) # 这里会报错.既然有全局变量b,为什么会报错呢?
    """
    事实上,Python编译函数的定义体的时候,它判断b是局部变量,因为在函数中给它赋值了.生成的字节码证实了这种判断.
    python会尝试从本地环境获取b.后面调用f2(3)时,f2的定义体会获取并打印局部变量a的值,但是尝试获取局部变量b的值时,发现b没有绑定值.
    这不是缺陷,而是设计选择:Python不要求声明变量,但是假定在函数定义体中赋值的变量是局部变量.这比JavaScript的行为好多了,JavaScript也不要求声明全局变量,但是如果忘记把
    变量声明为局部变量(使用var),可能会在不知情的情况下获取全局变量.
    """

    f3(5)


